package com.googlecode.droidcare.common;

import java.io.File;
import java.io.Serializable;
import java.util.Map;
import java.util.Map.Entry;

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.googlecode.droidcare.common.di.GuiceModule;
import com.googlecode.droidcare.common.di.GuiceUtils;
import com.googlecode.droidcare.common.provider.Provider;
import com.googlecode.droidcare.common.provider.ProviderManager;
import com.googlecode.droidcare.common.usr.User;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		//doIt("MyContext.setDigit(5);"); //globalVariable
//		doIt("function init(myContext) {"
//				+ "\n\tmyContext.setDigit(5);"
//				+ "\n\tvar res = myContext.doSomeStuff();"
//				+ "\n\tmyContext.setDigit(res);" +
//				"\n}"); //function
		magic();


	}
	
	public static void doIt(String script) {
		//global variable
//		Context ctx = Context.enter();
//		ctx.setOptimizationLevel(-1);
//		Scriptable scope = ctx.initStandardObjects();
//		MyContext myCtx = new MyContext();
//		ScriptableObject.putProperty(scope, "MyContext", myCtx);
//		ctx.evaluateString(scope, script, "doit:", 1, null);
//		Context.exit();
		//functions
//		Context ctx = Context.enter();
//		MyContext myCtx = new MyContext();
//		ctx.setOptimizationLevel(-1);
//		Scriptable scope = ctx.initStandardObjects();
//		ctx.evaluateString(scope, script, "doit:", 1, null);
//		Function initFunc = (Function)scope.get("init", scope);
//		initFunc.call(ctx, scope, scope, new Object[] {myCtx});
//		Context.exit();
	}
	
	public static void magic() {
		Guice.createInjector(new GuiceModule());
		AppContext appContext = AppContext.getInstance();
		Provider pr = appContext.newProvider();
		User usr = AppContext.getInstance().getUserAccount().getUser();
		GuiceUtils.getInstance(Provider.class);
		usr.setLogin("863844218");
		usr.setPassword("bitegsmlabas");
		//tk.vendigo.rhino_test.Context.setCurrentConText(appContext);
		ScriptEngine engine = appContext.getScriptEngine();
		File f = new File("test.js");
		if (f.exists()) {
			engine.eval(f);
		}
		f = new File("test2.js");
		if (f.exists()) {
			engine.eval(f);
		}
		
		ProviderManager manager = appContext.getProviderManager();
		Provider provider = manager.getProviderRegistry().get("testProvider");
		provider.init();
		provider.update();
		provider.update();
		//prprovider.getProviderService().update(appContext);
		//System.out.println("done");
		
		
//		Map<String, Provider> functionMap = appContext.getProviderManager().getProviderRegistry();
//		for (Entry<String, Provider> entry : functionMap.entrySet()) {
//			Object function = entry.getValue();
//			ProviderDescriptor desc = new ProviderDescriptor();
//			if (function instanceof String) {
//				engine.callFunction((String)function, desc);
//			}
//			if (function instanceof Function) {
//				engine.callFunction((Function)function, desc);
//			}
//			//System.out.println(desc.name + " " + desc.updateFunc);
//			
//		}
	}
	
	

}
